#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <strings.h>
#include <errno.h> // 全局变量（临界资源），所有库函数都会修改它
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/wait.h>
#include <pthread.h> // POSIX thread

void *routine1(void *arg)
{
    // 设置动态优先级
    nice(10);

    int i=0;
    while(1)
    {
        fprintf(stderr, "%c", 'a'+i);
        i++;
        i %= 26;
    }
}

void *routine2(void *arg)
{
    // 设置动态优先级
    nice(-10);

    int i=0;
    while(1)
    {
        fprintf(stderr, "%d", i++);
    }
}

int main(int argc, char const *argv[])
{
    pthread_attr_t attr;

    // 将想要的属性加入attr
    pthread_attr_init(&attr);

    // 设置线程为显式调度策略（非默认）
    pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);

    // 设置线程的调度策略: 1-99: FIFO/RR/   0:OTHER
    pthread_attr_setschedpolicy(&attr, SCHED_OTHER);

    // 设置静态优先级
    struct sched_param param;
    param.sched_priority = 0;
    pthread_attr_setschedparam(&attr, &param);

    pthread_t tid;
    pthread_create(&tid, &attr, routine1, NULL); // 输出字母

    param.sched_priority = 0;
    pthread_attr_setschedparam(&attr, &param);   // 设置静态优先级(0-99)
    pthread_create(&tid, &attr, routine2, NULL); // 输出数字

    pthread_exit(NULL);
}
